package gormConfig

import (
	"time"

	"gorm.io/gorm/logger"
	"gorm.io/gorm/schema"
)

// gorm框架在建立连接之后，做的一些默认配置

type Config struct {
	SkipDefaultTransaction                   bool
	NamingStrategy                           schema.Namer
	Logger                                   logger.Interface // 可以替换日志模块
	NowFunc                                  func() time.Time // 更改创建时间使用的函数
	DryRun                                   bool             // 生成sql但是不执行，可用于准备或者测试生成的sql
	PrepareStmt                              bool
	DisableNestedTransaction                 bool
	AllowGlobalUpdate                        bool
	DisableAutomaticPing                     bool
	DisableForeignKeyConstraintWhenMigrating bool // 是否禁止创建外键
}

/* SkipDefaultTransaction   跳过默认开启事务模式， true：跳过
db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{
SkipDefaultTransaction: true,
})
*/

/* NamingStrategy  表名称命名策略。 允许用户通过覆盖默认的NamingStrategy来更改命名约定，这需要实现接口 Namer
type Namer interface {
	TableName(table string) string
	ColumnName(table, column string) string
	JoinTableName(table string) string
	RelationshipFKName(Relationship) string
	CheckerName(table, column string) string
	IndexName(table, column string) string
}

db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{
  NamingStrategy: schema.NamingStrategy{
    TablePrefix: "t_",   // 表名前缀，`User`表为`t_users`
    SingularTable: true, // 使用单数表名，启用该选项后，`User` 表将是`user`
    NameReplacer: strings.NewReplacer("CID", "Cid"), // 在转为数据库名称之前，使用NameReplacer更改结构/字段名称。
  },
})

NamingStrategy: schema.NamingStrategy{ // 给创建表时候使用的
			SingularTable: true,
			TablePrefix: "mall_",// 全部的表名前面加前缀
		},

*/

/* PrepareStmt在执行任何 SQL 时都会创建一个 prepared statement 并将其缓存，以提高后续的效率

db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{
  PrepareStmt: false,
})

*/
